﻿using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CREAPA.Dominio;
using CREAPA.Dominio.contrato;
using CREAPA.Repositorio;

namespace CREAPA.RepositorioADO
{
    public class SetorRepositorioADO// : IRepositorio<SituacaoOsRepositorioADO>
    {
        private Contexto contexto;

        private void Inserir(Setor setor)
        {
            var strQuery = "";
            strQuery += " INSERT INTO Setor (Nome, Email, Sigla, Inspetoria, PermiteOS)";
            strQuery += string.Format(" values ('{0}','{1}','{2}','{3}','{4}')",
                setor.Nome, setor.Email, setor.Sigla, setor.Inspetoria, setor.PermiteOS);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(Setor setor)
        {
            var strQuery = "";
            strQuery += "UPDATE Setor SET ";
            strQuery += string.Format(" Nome='{0}', ", setor.Nome);
            strQuery += string.Format(" Email='{0}', ", setor.Email);
            strQuery += string.Format(" Sigla='{0}', ", setor.Sigla);
            strQuery += string.Format(" Inspetoria='{0}', ", setor.Inspetoria);
            strQuery += string.Format(" PermiteOS='{0}' ", setor.PermiteOS);
            strQuery += string.Format(" WHERE Id={0} ", setor.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(Setor setor)
        {
            if (setor.Id > 0)
            {
                Alterar(setor);
            }
            else
            {
                Inserir(setor);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM Setor WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public Setor ListarPorId(string Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM Setor WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        /*public IEnumerable<Setor> ListarPorIdDescricao(int IdOs)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format("SELECT * FROM Setor WHERE OS = '{0}'", IdOs);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }*/

        public IEnumerable<Setor> ListarSetor()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format (" select s.Id , s.Nome, Email, Sigla, i.Nome Inspetoria, PermiteOS from Setor s"+ 
                                              " inner join Inspetoria i on s.Inspetoria=i.Id order by s.Nome ");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<Setor> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var listaSetor = new List<Setor>();
            while (reader.Read())
            {
                var TemObjeto = new Setor()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Nome = reader["Nome"].ToString(),
                    Email = reader["Email"].ToString(),
                    Sigla = reader["Sigla"].ToString(),
                    Inspetoria = reader["Inspetoria"].ToString(),
                    PermiteOS = bool.Parse(reader["PermiteOS"].ToString())
                 };
                listaSetor.Add(TemObjeto);
            }
            reader.Close();
            return listaSetor;
        }
    }
}






